/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.fgv.tcc.fgv.imovel.controlle;

import br.com.fgv.tcc.fgv.imovel.service.Service;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;

public abstract class AbstractCrudBean<Entity> implements Serializable {

    protected List<Entity> items = null;

    protected Entity selected;

    protected static Logger logger;

    protected abstract Service getServiceManager();

    protected abstract void novaInstancia();

    protected AbstractCrudBean() {
        items = null;
    }

    public void setItems(List<Entity> items) {
        this.items = items;
    }

    public List getItems() {
        if (items == null) {
            try {
                items = getServiceManager().listarTodos();

            } catch (HibernateException e) {
                addErro(e.getMessage());

            }
        }
        return items;
    }

    public void salvarAtualizar() {
        try {
            getServiceManager().salvarAtualizar(selected);
            addMessagem("Regsitro  salvo com sucesso.");

        } catch (HibernateException e) {
            addErro("Erro ao salvar registro." + e.getMessage());
        } finally {
            items = null;
        }
    }

    public void atualizar() {
        try {
            getServiceManager().atualizar(selected);
            addMessagem("Registro  Atuaizado com sucesso");

        } catch (HibernateException e) {
            addErro(" Erro ao atualizar rgistro" + e.getMessage());

        } finally {
            items = null;

        }
        items = null;
    }

    public void cancelar() {
        novaInstancia();
    }

    public void remover() {

        try {
            getServiceManager().remover(selected);
            addMessagem("Registro  removido com sucesso");

        } catch (HibernateException e) {
            addErro("Erro ao remover registro " + e.getMessage());

        } finally {
            items = null;

        }

    }

    public void addMessagem(String summary) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void addErro(String summary) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, null);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void addAlerta(String summary) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, summary, null);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    /*
    
    

     private Class classePersistida;

     private static Logger logger;

     private List<Situacao> items = null;

     private Situacao selected = new Situacao();

     protected abstract Service getService();

     public AbstractCrudBean(Class classePersistida) {
     this.classePersistida =   classePersistida;
     }

     public Situacao getSelected() {
     return selected;
     }

     public void setSelected(Situacao selected) {
     this.selected = selected;
     }

     public void preparaNovo() {
     selected = new Situacao();
     }

     public void salvarAtualizar(ActionEvent actionEvent) {
     try {
     getService().salvarAtualizar(selected);
     addMessagem("Regsitro  salvo com sucesos");
     logger.trace("@@@Registro salvo");

     } catch (Exception e) {
     addErro("Erro ao salvar registro" + e.getMessage());
     logger.error(e);

     } finally {
     items = null;
     logger.trace("@@@Fim da operação salvar");

     }
     }

     public void atualizar(ActionEvent actionEvent) {
     try {
     getService().atualizar(selected);
     addMessagem("Regsitro  Atuaizar com sucesos");
     logger.trace("@@@Registro salvo");

     } catch (Exception e) {
     addErro(" Erro ao atualizar");
     logger.error(e);

     } finally {
     items = null;
     logger.trace("@@@Fim da operação altualzar");

     }
     items = null;
     }

     public void cancelar(ActionEvent actionEvent) {
     selected = new Situacao();
     logger.trace("@@@Fim da operação cancelar");

     }

     public void remover(ActionEvent actionEvent) {
     if (selected == null || selected.getCodigo() == null) {
     addErro("Não existe registro selecionado para exclusão");
     return;
     }
     try {
     getService().remover(selected);
     addMessagem("Registro  removovido com sucesso");
     logger.trace("@@@Registro removido");

     } catch (Exception e) {
     addErro("Erro ao remover registro");

     logger.error(e);

     } finally {
     items = null;

     }

     }

     public List<Situacao> getItems() {
     if (items == null) {
     try {
     items = getService().listarTodos();
     logger.trace("@@@Lusta todos");

     } catch (Exception e) {
     addErro("Erro ao listar registros");
     logger.error(e);

     }
     }
     return items;
     }

     public void addMessagem(String summary) {
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, null);
     FacesContext.getCurrentInstance().addMessage(null, message);
     }

     public void addErro(String summary) {
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, null);
     FacesContext.getCurrentInstance().addMessage(null, message);
     }

     public void addAlerta(String summary) {
     FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, summary, null);
     FacesContext.getCurrentInstance().addMessage(null, message);
     }
     */
}
